<?php

namespace App\Services;

use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;

class UserService
{
    /**
     * 更新用户资料
     */
    public function updateProfile(User $user, array $data): User
    {
        return DB::transaction(function () use ($user, $data) {
            // 处理头像上传
            if (isset($data['avatar']) && $data['avatar'] instanceof \Illuminate\Http\UploadedFile) {
                // 删除旧头像（如果存在）
                if ($user->avatar && Storage::disk('public')->exists($user->avatar)) {
                    Storage::disk('public')->delete($user->avatar);
                }

                // 保存新头像，文件路径会自动包含 'avatars/' 前缀
                $data['avatar'] = $data['avatar']->store('avatars', 'public');
            }

            $user->update($data);

            return $user->fresh();
        });
    }

    /**
     * 增加用户经验值
     */
    public function addExp(User $user, int $exp): void
    {
        $user->increment('exp', $exp);
    }

    /**
     * 获取用户信息（包含关联数据）
     */
    public function getUserInfo(User $user): User
    {
        return $user->load([
            // 后续添加关联关系
            // 'posts',
            // 'favorites',
            // 'followers',
            // 'following',
        ]);
    }

    /**
     * 获取用户的帖子列表
     *
     * @param  User  $user  用户
     * @param  int  $perPage  每页数量
     * @param  User|null  $currentUser  当前登录用户（用于批量加载点赞和收藏状态）
     */
    public function getUserPosts(User $user, int $perPage = 15, ?User $currentUser = null)
    {
        // 使用 PostService 的方法
        return app(\App\Services\PostService::class)->getUserPosts($user, $perPage, $currentUser);
    }

    /**
     * 获取用户的收藏列表
     *
     * @param  User  $user  用户
     * @param  int  $perPage  每页数量
     * @param  User|null  $currentUser  当前登录用户（用于批量加载点赞和收藏状态）
     */
    public function getUserFavorites(User $user, int $perPage = 15, ?User $currentUser = null)
    {
        // 使用 PostService 的方法
        return app(\App\Services\PostService::class)->getUserFavorites($user, $perPage, $currentUser);
    }

    /**
     * 获取用户公开信息（用于显示其他用户的主页）
     */
    public function getPublicUserInfo(User $user, ?User $currentUser = null): array
    {
        // 优化：使用 withCount 批量加载统计信息，避免N+1查询
        $user = $user->loadCount([
            'posts',
            'favorites',
            'joinedBars',
            'ownedBars',
        ]);

        // 只返回公开可见的信息
        return [
            'id' => $user->id,
            'username' => $user->username, // 添加 username，用于路由
            'name' => $user->name,
            'nickname' => $user->nickname,
            'avatar' => $user->avatar,
            'signature' => $user->signature,
            'bio' => $user->bio,
            'exp' => $user->exp,
            'level' => $user->level,
            'created_at' => $user->created_at,
            // 统计信息（使用 loadCount 的结果）
            'posts_count' => $user->posts_count ?? 0,
            'favorites_count' => $user->favorites_count ?? 0,
            'joined_bars_count' => $user->joined_bars_count ?? 0,
            'owned_bars_count' => $user->owned_bars_count ?? 0,
            'followers_count' => $user->followers_count ?? 0,
            'following_count' => $user->following_count ?? 0,
            // 关注状态（如果当前用户已登录）
            'is_following' => $currentUser ? $currentUser->isFollowing($user) : false,
            'is_followed_by' => $currentUser ? $user->isFollowing($currentUser) : false,
        ];
    }
}
